#ifndef FILESYNCMANGE_H
#define FILESYNCMANGE_H

#include <QObject>
#include <QFile>
#include <QFileInfo>
#include <QMap>

#include "fileinfo.h"
#include "fileparser.h"
#include "downloadtask.h"

class FileSyncManage : public QObject
{
    Q_OBJECT
public:
    FileSyncManage(QString uuid, QUrl url, QObject *parent = nullptr);
    ~FileSyncManage();

    enum LIST_TYPE {
        TYPE_PICTURE = 0,          // 图片
        TYPE_VIDEO = 1,            // 视频
        TYPE_MUSIC = 2,            // 音乐
        TYPE_DOCUMENT = 3,         // 文档
        TYPE_QQ_PICTURE = 4,       // qq图片
        TYPE_QQ_VIDEO = 5,         // qq视频
        TYPE_QQ_MUSIC = 6,         // qq音乐
        TYPE_QQ_DOCUMENT = 7,      // qq文档
        TYPE_WECHAT_PICTURE = 8,   // 微信图片
        TYPE_WECHAT_VIDEO = 9,     // 微信视频
        TYPE_WECHAT_MUSIC = 10,    // 微信音乐
        TYPE_WECHAT_DOCUMENT = 11, // 微信文档
        TYPE_FILE_NUM = 12,        // 分类文件数量
        TYPE_SEARCH_FILE = 13,     // 搜索索引文件
    };

    // 中止当前下载
    void abortDown();

    // 获取分类列表项数
    void getItemCount(QMap<QString, int> &map);

    // 获取分类列表
    void getClassifiedFileList(int type, QList<FileInfo> &list);

    void updateFileInfo(int type = -1);

    // 下载缩略图
    void downThumb(int type);

    // 停止缩略图下载
    void abortDownThumb();

    // 下载临时文件
    void downTempFile(QString filePath);

    // 清理文件
    void clearFile();

    void downloadSearch();

private:
    void downFile(const QStringList &fileList, QString downloadPath, QString flag = "");
    void nextTask();
    void downClassifiedFile(int type);
    void clearTempFiles(const QString path);
    QString getFileNumInfo(QString filePath);

private:
    DownloadTask *m_task = nullptr;     // 下载任务
    QThread *m_thread = nullptr;        // 下载线程
    FileParSer *m_fileParser = nullptr; // 文件解析
    QUrl m_url;                         // 服务器地址
    QString m_uuid = "";                // 连接设备的uuid
    QStringList m_fileList;             // 下载文件地址列表
    QString m_downPath = "";            // 下载路径
    QString m_fileName = "";            // 文件名
    QString m_fileFlag = "";            // 文件前缀

Q_SIGNALS:
    void sigDownFileFinish(QString, QString);
    void sigDownAllFileFinish(QString);
    void sigDownFileFail(QString, QString);
    void sigSearchInfoFinsh(bool, QString);
    void sigTempFileDownFinish(QString);

public Q_SLOTS:
    void slotTaskFinsh(QString flag, QString name);
    void slotTaskFail(QString name, QString flag);
};

#endif // FILESYNCMANGE_H
